﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace kairiseiMAParser
{
    class Tools
    {
        public static string ENEMY_AI_ORDER_PARTY(string str)
        {
            switch (str)
            {
                case "NULL":
                    return "无";
                case "PARTS_FULL":
                    return "部位全在";
                case "PARTS_1_BREAK":
                    return "部位1破坏";
                case "PARTS_2_BREAK":
                    return "部位2破坏";
                case "PARTS_3_BREAK":
                    return "部位3破坏";
                case "PARTS_ALL_BREAK":
                    return "部位全破";
                default:
                    return str;
            }
        }

        public static string ENEMY_AI_ORDER_TRIGGER(string str)
        {
            switch (str)
            {
                case "NULL":
                    return "无";
                case "PHYSIC_DAMAGE":
                    return "受到物理攻击";
                case "MAGIC_DAMAGE":
                    return "受到魔法攻击";
                case "NOT_TARGET":
                    return "未被卡片指定";
                case "DEAD_COUNT":
                    return "死亡次数";
                case "SKILL_ROLE_KIND_DEBUFF_NOW_TURN":
                    return "本回合受到如下Debuff：";
                case "ATK_BREAK_BY_ATK":
                    return "物理攻击下降";
                case "ATK_BREAK_BY_INT":
                    return "魔法伤害下降";
                case "ATK_BREAK_BY_MND":
                    return "MND下降";
                case "GUARD_BREAK_BY_MDEF":
                    return "魔法防御降低";
                case "GUARD_BREAK_BY_DEF":
                    return "物理防御降低";
                case "DAMAGE":
                    return "受到攻击";
                case "SKILL_ROLE_KIND_DEBUFF_BY_USER":
                    return "有玩家受到如下Debuff：";
                case "WEAKNESS":
                    return "被锁定";
                case "SKILL_ROLE_KIND_DEBUFF":
                    return "自身已受到如下Debuff：";
                case "POISON":
                    return "毒";
                case "SKILL_ROLE_KIND_BUFF_NOW_TURN_BY_USER":
                    return "本回合玩家拥有如下Buff：";
                case "ATK_UP_BY_ATK":
                    return "ATK提升";
                case "ATK_UP_BY_INT":
                    return "INT提升";
                case "ATK_UP_BY_MND":
                    return "MND提升";
                case "DEF_UP_BY_DEF":
                    return "DEF提升";
                case "DEF_UP_BY_MDEF":
                    return "MDEF提升";
                case "SKILL_ROLE_KIND_BUFF":
                    return "自身已拥有如下Buff：";
                case "SKILL_ROLE_KIND_BUFF_BY_USER":
                    return "有玩家拥有如下Buff：";
                /*case "BAD_STATUS":
                 return "在坏状态";
                case "AI_FLAG":
                 return "部位全破";
                case "DRAIN":
                 return "部位全破";
                case "HEAL":
                 return "部位全破";
                case "HEAL_TOTAL":
                 return "部位全破";
                case "PHYSIC_DAMAGE_LARGE":
                 return "部位全破";
                case "MAGIC_DAMAGE_LARGE":
                 return "部位全破";
                case "ATTR":
                 return "部位全破";
                case "ENEMY_DEAD":
                 return "部位全破";
                case "DECK_COMBO_COUNT":
                 return "部位全破";*/
                default:
                    return str;
            }
        }

        public static string getskill_role(string type, string[] parameter)
        {
            StringBuilder st = new StringBuilder();
            switch (type)
            {
                case "ATTACK_AA":
                    {
                        st.Append("造成");
                        st.Append(parameter[0]);
                        st.Append("+");
                        st.Append(parameter[5]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[2]) / 1000.0);
                        st.Append("的");
                        st.Append(parameter[7]);
                        st.Append("属性");
                        st.Append(parameter[8]);
                        st.Append("伤害");
                        return st.ToString();
                    }
                case "ATK_BREAK_FIXED":
                    {
                        st.Append(parameter[1]);
                        st.Append("下降");
                        st.Append(parameter[2]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[3]) / 1000.0);
                        st.Append("持续");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "ATK_BREAK_BY_SELF_PARAM":
                    {
                        st.Append(parameter[1]);
                        st.Append("下降");
                        st.Append(parameter[2]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[3]) / 1000.0);
                        st.Append("持续");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "ATK_UP_FIXED":
                    {
                        st.Append(parameter[1]);
                        st.Append("上升");
                        st.Append(parameter[2]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[3]) / 1000.0);
                        st.Append("持续");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "ATK_UP_BY_SELF_PARAM":
                    {
                        st.Append(parameter[1]);
                        st.Append("上升");
                        st.Append(parameter[2]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[3]) / 1000.0);
                        st.Append("+");
                        st.Append(parameter[2]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[4]) / 1000.0);
                        st.Append("持续");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "DEBUFF_RELEASE":
                    {
                        st.Append("清除所有");
                        st.Append(parameter[2]);
                        st.Append("的debuff");
                        return st.ToString();
                    }
                case "BUFF_RELEASE":
                    {
                        st.Append("清除所有buff");
                        return st.ToString();
                    }
                case "DEF_UP_BY_SELF_PARAM":
                    {
                        st.Append(parameter[1]);
                        st.Append("上升");
                        st.Append(parameter[2]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[3]) / 1000.0);
                        st.Append("持续");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "DEF_UP_FIXED":
                    {
                        st.Append(parameter[1]);
                        st.Append("上升");
                        st.Append(parameter[2]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[3]) / 1000.0);
                        st.Append("持续");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "REVIVE":
                    {
                        st.Append("部位复活");
                        return st.ToString();
                    }
                case "GUARD_BREAK_BY_SELF_PARAM":
                    {
                        st.Append(parameter[1]);
                        st.Append("下降");
                        st.Append(parameter[2]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[3]) / 1000.0);
                        st.Append("持续");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "HEAL_BY_SELF_PARAM":
                    {
                        st.Append("回复");
                        st.Append(parameter[0]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[1]) / 1000.0);
                        return st.ToString();
                    }
                case "HEAL_BY_TARGET_MAXHP":
                    {
                        st.Append("回复");
                        st.Append(ToSingle(parameter[0]) / 10.0);
                        st.Append("%");
                        return st.ToString();
                    }
                case "HEAL_FIXED":
                    {
                        st.Append("回复");
                        st.Append(parameter[0]);
                        st.Append("+");
                        st.Append(parameter[4]);
                        return st.ToString();
                    }
                case "REGENERATE_BY_SELF_PARAM":
                    {
                        st.Append("回复");
                        st.Append(parameter[1]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[2]) / 1000.0);
                        st.Append("持续");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "ATK_OP_PIERCING":
                    {
                        st.Append("无视");
                        st.Append(ToSingle(parameter[0]));
                        st.Append("%防御");
                        return st.ToString();
                    }
                case "ATK_OP_DRAIN":
                    {
                        st.Append("伤害量*");
                        st.Append(ToSingle(parameter[0]) / 1000.0);
                        st.Append("恢复");
                        return st.ToString();
                    }
                case "OUTPUT_TEXT":
                    {
                        st.Append("在屏幕上显示文字");
                        return st.ToString();
                    }
                case "DESTRUCT":
                    {
                        st.Append("自爆");
                        return st.ToString();
                    }
                case "CARD_SEAL":
                    {
                        st.Append("封印");
                        st.Append(parameter[2]);
                        st.Append("~");
                        st.Append(parameter[3]);
                        st.Append("张cost为");
                        st.Append(parameter[6]);
                        st.Append("~");
                        st.Append(parameter[7]);
                        st.Append("的");
                        st.Append(parameter[4]);
                        st.Append("类型");
                        st.Append(parameter[5]);
                        st.Append("属性的卡");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "GUARD_BREAK_FIXED":
                    {
                        st.Append(parameter[1]);
                        st.Append("下降");
                        st.Append(parameter[2]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[3]) / 1000.0);
                        st.Append("持续");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "ATTACK_BARRIER":
                    {
                        st.Append(parameter[1]);
                        st.Append("*");
                        st.Append(parameter[2]);
                        st.Append(" ");
                        st.Append(parameter[4]);
                        st.Append("型免伤盾持续");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "WEAKNESS":
                    {
                        st.Append(parameter[0]);
                        st.Append("回合锁定，伤害上升");
                        st.Append(ToSingle(parameter[1]) / 1000.0);
                        return st.ToString();
                    }
                case "NONE":
                    {
                        return "无？";
                    }
                case "HP_CUT":
                    {
                        st.Append("HP减少");
                        st.Append(parameter[0]);
                        st.Append("%");
                        return st.ToString();
                    }
                case "POISON":
                    {
                        st.Append("每回合");
                        st.Append(parameter[3]);
                        st.Append("+");
                        st.Append(parameter[7]);
                        st.Append("*");
                        st.Append(ToSingle(parameter[5]) / 1000.0);
                        st.Append("毒伤，持续");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "DEAL_PENALTY":
                    {
                        return "DEAL_PENALTY";
                    }
                case "DEBUFF_RELEASE_ONE":
                    {
                        st.Append("清除 ");
                        st.Append(parameter[2]);
                        st.Append(" Debuff");
                        return st.ToString();
                    }
                case "ATTR_HIDE":
                    {
                        st.Append("属性隐藏");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "REWRITE":
                    {
                        st.Append("属性更改为");
                        st.Append(parameter[1]);
                        st.Append("持续");
                        st.Append(parameter[0]);
                        st.Append("回合");
                        return st.ToString();
                    }
                case "ENEMY_AI_TRIGGER_FLAG_SET":
                    {
                        st.Append("将AI_FLAG ");
                        st.Append(parameter[0]);
                        st.Append(" 的值置为");
                        st.Append(parameter[1]);
                        return st.ToString();
                    }
                /*case "DARKNESS_RANDOM":
                    {
                        return "无？";
                    }*/
                default:
                    {
                        return null;
                    }
            }
        }

        public static float ToSingle(string str)
        {
            if (str == "")
            {
                return 0;
            }
            else
            {
                return Convert.ToSingle(str);
            }
        }
    }
}
